#pragma once

#include <iostream>
#include <cstdio>
#include <cstdarg>
#include <ctime>
#include <string>

// 日志级别
#define DEBUG 0
#define NORMAL 1
#define WARNING 2
#define ERROR 3
#define FATAL 4

const char *gLevelMap[] = {
    "DEBUG",
    "NORMAL",
    "WARNING",
    "ERROR",
    "FATAL"};

// 完整的日志功能，至少有 日志等级 时间 支持用户自定义(日志内容, 文件行，文件名)
void logMessage(int level, const char *format, ...) // const char *format, ... 可变参数
{
    // #ifndef DEBUG_SHOW
    //     if(level== DEBUG) return;
    // #endif

    // 标准部分：固定输出的内容
    char stdBuffer[1024];
    time_t timestamp = time(nullptr);
    snprintf(stdBuffer, sizeof stdBuffer, "[%s] [%ld] ", gLevelMap[level], timestamp);

    // 自定义部分：允许用户根据自己的需求设置
    char logBuffer[1024];
    va_list args; // 定义一个va_list对象
    va_start(args, format);
    vsnprintf(logBuffer, sizeof logBuffer, format, args);
    va_end(args); // 相当于 args == nullptr

    printf("%s%s\n", stdBuffer, logBuffer);
}
